const fs = require('fs');
const path = require('path')
const ws  = fs.createWriteStream(path.resolve(__dirname,'b.txt'),{
    //  可读流的highWaterMark: 每次读取多少个   
    //  可写流的highWaterMark： 我期望每次能写入多少
    highWaterMark:3,// 默认值是16k
    flags:'w',
    encoding:'utf8',
    start:0,//开始写入的位置，没有end
    emitClose:true,//是否触发close
})
// 写入的编码只能是 字符串或者二进制数据
// 多个异步并发 会变成 串行。[1,2,3,4]内部会将多个异步任务进行排队
// flag如果在写入是达到highWaterMark的预期了，就会变成false,但如果继续写入还是可以写入。
let flag = ws.write('1','utf8',function(){ 
    console.log('成功1')
}); // 底层调用的是 fs.write() 是异步的方法 
console.log(flag); //true

flag = ws.write('2','utf8',function(){
    console.log('成功2')
});
console.log(flag); //true
flag = ws.write('3','utf8',function(){
    console.log('成功3')
})
// console.log(flag); //false
// flag = ws.write('4','utf8',function(){
//     console.log('成功4')
// })
console.log(flag); //false
// 需要手动告诉写完了，才能调用close
ws.end('ok'); 
// 内部采用的就是 write + close
ws.on('close',function(){
    console.log('close')
})

// drain事件只有当达到预期值 (并且消耗掉)的时候才能触发
ws.on('drain',()=>{ // 等待内存全部写入到文件中后，会触发drain. 
    console.log('drain')
    write();
})